import { ElMessage, ElMessageBox } from "element-plus";
import I18n from "@/languages/index";
const $t = I18n.global.t;
//#region messageBox提示

export const delConfimMsg = (msgInfo: baseMsg | string) => {
  msgInfo.msg= $t("btn.delTip");
  confirmWarningMsg(msgInfo)
};

// 多次弹窗提示
export const moreConfirm = (msgInfo: baseMsg | string| Array<string>, moreNum?: number) => {
  let numOfTimes = moreNum ?? 0; 
  console.log(msgInfo,"==============提示信息")
  let msgArr=[],msgBoolArr=Array.isArray(msgInfo.msg);
  if(msgBoolArr){
    msgArr=msgInfo.msg;
    msgInfo.msg=msgArr[numOfTimes];
  
  }


  baseMsgConfirm(
    { type: "warning" },
    msgInfo,
    () => {
      numOfTimes++;
      console.log(numOfTimes, "点击次数");
      if (numOfTimes === msgInfo.num) {
        msgInfo.callback("confirm");

        return;
      }
      if(msgBoolArr){
        msgInfo.msg=msgArr;
      }
    
      moreConfirm(msgInfo, numOfTimes);
    },
    () => {
      msgInfo.callback("cancel");
    }
  );
};

export const confirmDangerMsg = (msgInfo: baseMsg | string) => {
  baseMsgConfirm(
    { type: "error" },
    msgInfo,
    () => {
      msgInfo.callback("confirm");
    },
    () => {
      msgInfo.callback("cancel");
    }
  );
};

export const confirmSuccessMsg = (msgInfo: baseMsg | string) => {
  baseMsgConfirm(
    { type: "success" },
    msgInfo,
    () => {
      msgInfo.callback("confirm");
    },
    () => {
      msgInfo.callback("cancel");
    }
  );
};

export const confirmWarningMsg = (msgInfo: baseMsg | string) => {
  baseMsgConfirm(
    { type: "warning" },
    msgInfo,
    () => {
      msgInfo.callback("confirm");
    },
    (action) => {
      console.log(action)
      msgInfo.callback(action);
    }
  );
};

export const htmlMsg = (msgInfo: baseMsg | string) => {
  let titleTip = $t("btn.titleTip");
  let confirmTxt = $t("btn.confirmTxt");
  ElMessageBox.alert(msgInfo?.msg ?? msgInfo, msgInfo?.title ?? titleTip, {
    confirmButtonText: msgInfo?.confirmTxt ?? confirmTxt,
    dangerouslyUseHTMLString: true,
    "show-close": false, //MessageBox 是否显示右上角关闭按钮
    callback: msgInfo.callback
  });
};

const baseMsgConfirm = (conObj?: Object, msgInfo: baseMsg | string, confirmFun: any, cancalFun: any) => {
  let titleTip = $t("btn.titleTip");
  let confirmTxt = $t("btn.confirmTxt");
  let cancelTxt = $t("btn.cancelTxt");

  ElMessageBox.confirm(msgInfo?.msg ?? msgInfo, msgInfo?.title??titleTip, {
    ...conObj,
    autofocus:false,
    confirmButtonText: msgInfo?.confirmTxt ?? confirmTxt,
    cancelButtonText: msgInfo?.cancelTxt ?? cancelTxt,
    "close-on-click-modal": false, //是否可通过点击遮罩层关闭 MessageBox
    "show-close": msgInfo?.showClose??false, //MessageBox 是否显示右上角关闭按钮
    distinguishCancelAndClose: msgInfo?.showClose??false
  })
    .then(confirmFun)
    .catch(cancalFun);
};
//#endregion

//#region 基础msg提示
export const warnMsg = (msgInfo: baseMsg | string) => {
  baseMsg("warning", msgInfo);
};
export const failMsg = (msgInfo: baseMsg | string) => {
  baseMsg("error", msgInfo);
};
export const successMsg = (msgInfo: baseMsg | string) => {
  baseMsg("success", msgInfo);
};
export const infoMsg = (msgInfo: baseMsg | string) => {
  baseMsg("info", msgInfo);
};

/**
 * @name: 基于element plus封装提示信息
 * @test: test font
 * @msg:
 * @param {string} type
 * @param {baseMsg} msgInfo
 * @param {any} closeFun
 * @return {*}
 */
const baseMsg = (type?: string, msgInfo: baseMsg | string) => {
  ElMessage({
    type: type,
    duration:5000,
    showClose: msgInfo?.showClose,
    dangerouslyUseHTMLString: true,
    message: msgInfo?.msg ?? msgInfo,
    onClose: msgInfo.callback
  });
};
//#endregion

interface baseMsg {
  title?: string;//提示标题
  msg: string;//提示信息
  showClose?: boolean;
  num?: number; //点击次数
  confirmTxt?: string; //确认文本
  cancelTxt?: string; //取消文本
  callback?: any;//返回方法
}

 